/******************* 1.Promise.allSettled了解吗？动手实现一下Promise.allSettled ******************/

// Promise.allSettled 返回参数内所有promise resolve和rejectd后的返回值
Promise.myAllSettled = function (promises) {
  let count = promises.length;
  let result = [];
  const judge = function (resolve) {
    if (result.length === count) {
      resolve(result);
    }
  };
  return new Promise((resolve, reject) => {
    promises.forEach((element) => {
      element
        .then((res) => {
          result.push({ status: "fulfilled", value: res });
          if (result.length === count) {
            resolve(result);
          }
        })
        .catch((e) => {
          result.push({ status: "rejected", value: e });
          if (result.length === count) {
            resolve(result);
          }
        });
    });
  });
};

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) =>
  setTimeout(reject, 100, "foo")
);
const promises = [promise1, promise2];

Promise.myAllSettled(promises).then((results) =>
  results.forEach((result) => console.log(result.status))
);

/**************** 2.什么是同步，什么是异步 *****************/

// js是单线程的，同步任务指的是主线程上排队执行的任务，只有上一个任务完成后，才会执行下一个任务
// 不进入主线程、而进入"任务队列"（task queue）的任务，只有等主线程任务执行完毕，
// "任务队列"开始通知主线程，请求执行任务，该任务才会进入主线程执行

/**************** 3.什么是宏任务，什么是微任务 *****************/

// 可以理解是每次执行栈执行的代码就是一个宏任务（包括每次从事件队列中获取一个事件回调并放到执行栈中执行）
// 可以理解是在当前 task 执行结束后立即执行的任务。也就是说，在当前task任务后，下一个task之前，在渲染之前
